<?php

/**
 * Объекты этого класса представляют описание полей таблиц в БД, что тождественно равно свойствам/полям типов
 */
class Field implements iField {

	private $properties = array ();

	/**
	 * Конструктор
	 * @param array $properties массив свойств объекта
	 */
	public function __construct (array $properties) {
		$this->properties = $properties;
	}
	
	/**
	 * Возвращает характер (тип: текстовое, числовое, справочник и т.д.) поля
	 * @return string
	 */
	public function getCharacter () {
		return $this->getValue ('character');
	}
	
	/**
	 * Возвращает id поля
	 * @return integer
	 */
	public function getId () {
		return $this->getValue ('id');
	}
	
	/**
	 * Проверяет, доступно ли поле на изменение
	 * @return boolean true - заблокировано
	 */
	public function isLocked () {
		return $this->getValue ('locked') ? true : false;
	}
	
	/**
	 * Проверяет, доступно ли поле для редактирования через форму (в противном случае только системой)
	 * @return boolean true - редактируемо
	 */
	public function isEditable () {
		return $this->getValue ('editable') ? true : false;
	}
	
	/**
	 * Возвращает латинское имя поля
	 * @return string
	 */
	public function getName () {
		return $this->getValue ('field_name');
	}
	
	/**
	 * Возвращает название поля
	 * @return string
	 */
	public function getTitle () {
		return $this->getValue ('title');
	}
	
	/**
	 * Возвращает id типа, которому принадлежит поле
	 * @return integer
	 */
	public function getTypeId () {
		return $this->getValue ('type_id');
	}
	
	/**
	 * Проверяет является поле "настоящим" или оно принадлежит другому объекту
	 * @return boolean
	 */
	public function isReal () {
		if (($this->getAddId () == 0/* && $this->getCharacter () != 'vote_status'*/) || $this->getCharacter () == 'tags' || $this->getCharacter () == 'guide' || $this->getCharacter () == 'multiguide'  || $this->getCharacter () == 'image') {
			return true;
		} else {
			return false;
		}
	}
	
	/**
	 * Возвращает обязательное поле или нет
	 * @return boolean
	 */
	public function isRequired () {
		return $this->getValue ('required') == 1 ? true : false;
	}
	
	/**
	 * Доступно поле для поиска или нет
	 * @return boolean
	 */
	public function isSearch () {
		return $this->getValue ('allow_search') == 1 ? true : false;
	}
	
	/**
	 * Возвращает текст ошибки поля
	 * @return string
	 */
	public function getErrorMessage () {
		return $this->getValue ('error');
	}
	
	/**
	 * Возвращает дополнительный id поля
	 * @return integer
	 */
	public function getAddId () {
		return $this->getValue ('additional_id');
	}
	
	/**
	 * Возвращает id связи между типами
	 * @return integer
	 */
	public function getConnectionId () {
		return $this->getValue ('connection_id');
	}
	
	/**
	 * Возвращает текст подсказки для поля
	 * @return string
	 */
	public function getHelp () {
		return $this->getValue ('help');
	}
	
	/**
	 * Возвращает максимально допустимое количество символов
	 * @return string
	 */
	public function getMaxlength () {
		return $this->getValue ('maxlength');
	}
	
	private function getValue ($name) {
		return isset ($this->properties[$name]) ? $this->properties[$name] : false;
	}
	
}